package com.jdzy.utils.common;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.nio.charset.StandardCharsets;
import java.util.Date;
import java.util.Map;

public class JwtUtils {
    /**
     * 生成jwt
     * 使用Hs256算法, 私匙使用固定秘钥
     *
     * @param secretKey jwt秘钥
     * @param ttlMillis jwt过期时间(毫秒)
     * @param claims    设置的信息
     * @return
     */
    public static String createJWT(String secretKey, long ttlMillis, Map<String,Object> claims){
        //设定签名算法
        SignatureAlgorithm signatureAlgorithm=SignatureAlgorithm.HS256;

        //获取JWT的时间
        long expMillis=System.currentTimeMillis()+ttlMillis;
        Date exp=new Date(expMillis);

        //设置jwt的body
        String jwt= Jwts.builder()
                //设置自定义内容
                .setClaims(claims)
                //设置签名使用的签名算法和密钥
                .signWith(signatureAlgorithm,secretKey.getBytes(StandardCharsets.UTF_8))
                //设置过期时间
                .setExpiration(exp)
                .compact();
        return jwt;
    }

    /**
     * Token解密
     *
     * @param secretKey jwt秘钥
     * @param token     加密后的token
     * @return
     */
    public static Claims parseJWT(String secretKey,String token){
        Claims claims=Jwts.parser()
                //设置签名的密钥
                .setSigningKey(secretKey.getBytes(StandardCharsets.UTF_8))
                //设置需要解析的jwt
                .parseClaimsJws(token)
                .getBody();
        return claims;
    }
}
